home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / GEM / AESEVENT.I < prev    next >
Encoding:
Modula Implementation  |  1993-12-10  |  14.7 KB  |  522 lines

  1. IMPLEMENTATION MODULE AESEvents; (*$L-, Y+*)
  2.  
  3.  
  4. (*  Megamax Modula-2 GEM-Library :  Die AES Ereignisfunktionen
  5.  *
  6.  *  Autor: Manuel Chakravarty           Erstellt :  05.11.87
  7.  *
  8.  *  Version   2.2     V#0040
  9.  *)
  10.  
  11. (*  05.11.87    | Übernahme von 'GEMBase' und 'GEMExt'
  12.  *  15.05.88    | Stack wird bei 'TimerEvent' und 'MessageEvent' richtig
  13.  *                berichtigt.
  14.  *  27.06.89    | Schönheitskorrekturen (Keine Def. oder Impl. änderungen)
  15.  *  12.01.90 TT | ROL -> LSR teilw. ersetzt, weil bei Byte-Sets MSByte
  16.  *                undefiniert ist
  17.  *  11.02.90    | Anpassung auf Compilerversion 4.0 (angefangen)
  18.  *  15.02.90    | A3-Stackbehandlung jetzt bei 'ButtonEvent' hoffentlich
  19.  *                immer richtig + Anpassung auf Compilerversion 4.0 (beendet)
  20.  *  02.04.90    | Anpassung auf public arrays
  21.  *  23.11.90    | Def-Text: MessageBuffer um 'int' erweitert, Doku korrigiert.
  22.  *  06.12.90    | Def-Text: MessageBuffer korrigiert.
  23.  *  10.03.91 TT | A3-Stackbehandlung bei 'ButtonEvent' nochmal korrigiert.
  24.  *)
  25.  
  26. FROM    SYSTEM          IMPORT ASSEMBLER;
  27.  
  28. FROM    GrafBase        IMPORT Point, Rectangle;
  29.  
  30. FROM    GEMGlobals      IMPORT GemChar, MButtonSet, SpecialKeySet;
  31.  
  32. IMPORT  GEMShare;
  33.  
  34.  
  35. (*$I GEMOPS.ICL *)
  36.  
  37. PROCEDURE keyboardEvent (): GemChar;
  38.   BEGIN
  39.     ASSEMBLER
  40.         MOVE.W  #EVNT_KEYBD,(A3)+
  41.         JSR     aes_if
  42.         MOVE.L  pubs,A0
  43.         MOVE.W  pubArrays.aINTOUT(A0),(A3)+
  44.     END;
  45.   END keyboardEvent;
  46.  
  47. PROCEDURE KeyboardEvent (VAR ch: GemChar);
  48.  
  49.   VAR   keys: SpecialKeySet;
  50.  
  51.   (*$L+*)
  52.   BEGIN
  53.     ASSEMBLER
  54. again
  55.         JSR     keyboardEvent
  56.         MOVE.L  ch(A6),A0
  57.         MOVE.W  -(A3),(A0)
  58.         
  59.         TST.W   keyboardPlugActive      ; watch-dog plug
  60.         BEQ     ende
  61.         CLR.B   keys(A6)
  62.         MOVE.L  ch(A6),(A3)+            ; 'ch' als VAR-Parm. übergeben
  63.         LEA     keys(A6),A1
  64.         MOVE.L  A1,(A3)+                ; 'keys' als VAR-Parm. übergeben
  65.         MOVE.L  keyboardPlug,A0
  66.         JSR     (A0)
  67.         TST.W   -(A3)
  68.         BEQ     again
  69. ende
  70.     END;
  71.   END KeyboardEvent;
  72.   (*$L=*)
  73.  
  74. PROCEDURE buttonEvent (    clicks     : CARDINAL;
  75.                            mask, state: MButtonSet;
  76.                        VAR mouseLoc   : Point;
  77.                        VAR buttons    : MButtonSet;
  78.                        VAR keyState   : SpecialKeySet): CARDINAL;
  79.   BEGIN
  80.     ASSEMBLER
  81.         MOVE.L  -(A3),-(A7)
  82.         MOVE.L  -(A3),-(A7)
  83.         MOVE.L  -(A3),-(A7)
  84.         
  85.         MOVE.L  pubs,A0
  86.         LEA     pubArrays.aINTIN+6(A0),A0
  87.         MOVEQ   #0, D0
  88.         SUBQ.L  #2, A3
  89.         MOVE.B  (A3), D0
  90.         MOVE.W  D0, -(A0)
  91.         SUBQ.L  #2, A3
  92.         MOVE.B  (A3), D0
  93.         MOVE.W  D0, -(A0)
  94.         MOVE.W  -(A3),-(A0)
  95.         
  96.         MOVE.W  #EVNT_BUTTON,(A3)+
  97.         JSR     aes_if
  98.         
  99.         MOVE.L  pubs,A0
  100.         LEA     pubArrays.aINTOUT(A0),A0
  101.         MOVE.W  (A0)+,(A3)+
  102.         MOVE.L  (A7)+,A1
  103.         MOVE.L  (A0)+,(A1)
  104.         MOVE.L  (A7)+,A1
  105.         MOVE.W  (A0)+,D0
  106.         MOVE.B  D0,(A1)
  107.         MOVE.L  (A7)+,A1
  108.         MOVE.W  (A0)+,D0
  109.         MOVE.B  D0,(A1)
  110.     END;
  111.   END buttonEvent;
  112.  
  113. PROCEDURE ButtonEvent (    clicks     : CARDINAL;
  114.                            mask, state: MButtonSet;
  115.                        VAR mouseLoc   : Point;
  116.                        VAR buttons    : MButtonSet;
  117.                        VAR keyState   : SpecialKeySet;
  118.                        VAR doneClicks : CARDINAL);
  119.  
  120.   VAR   clickResult: CARDINAL;
  121.  
  122.   (*$L+*)
  123.   BEGIN
  124.     ASSEMBLER
  125. again
  126.         MOVE.W  clicks(A6), (A3)+
  127.         MOVE.W  mask(A6), (A3)+
  128.         MOVE.W  state(A6), (A3)+
  129.         MOVE.L  mouseLoc(A6), (A3)+
  130.         MOVE.L  buttons(A6), (A3)+
  131.         MOVE.L  keyState(A6), (A3)+
  132.         JSR     buttonEvent
  133.         MOVE.W  -(A3),clickResult(A6)   ; clicks retten
  134.         
  135.         TST.W   buttonPlugActive        ; watch-dog plug
  136.         BEQ     ende
  137.         MOVE.W  clickResult(A6),(A3)+
  138.         MOVE.L  mouseLoc(A6),A0
  139.         MOVE.L  (A0),(A3)+
  140.         MOVE.L  buttons(A6),A0
  141.         MOVE.B  (A0),(A3)+
  142.         ADDQ.L  #1, A3
  143.         MOVE.L  keyState(A6),A0
  144.         MOVE.B  (A0),(A3)+
  145.         ADDQ.L  #1, A3
  146.         MOVE.L  buttonPlug,A0
  147.         JSR     (A0)
  148.         TST.W   -(A3)
  149.         BEQ     again
  150. ende
  151.  
  152.         MOVE.L  doneClicks(A6),A0
  153.         MOVE.W  clickResult(A6), (A0)
  154.     END;
  155.   END ButtonEvent;
  156.   (*$L=*)
  157.  
  158. PROCEDURE mouseEvent (    moveDirec: RectEnterMode;
  159.                           frame    : Rectangle;
  160.                       VAR buttons  : MButtonSet;
  161.                       VAR keyState : SpecialKeySet;
  162.                       VAR loc      : Point): LONGCARD;
  163.  
  164.   BEGIN
  165.     ASSEMBLER
  166.         MOVE.L  -(A3),-(A7)
  167.         MOVE.L  -(A3),-(A7)
  168.         
  169.         MOVE.L  pubs,A0
  170.         LEA     pubArrays.aINTIN+$A(A0),A0
  171.         MOVE.L  -(A3),-(A0)
  172.         MOVE.L  -(A3),-(A0)
  173.         MOVE.W  -(A3),-(A0)
  174.         MOVE.W  #EVNT_MOUSE,(A3)+
  175.         JSR     aes_if
  176.         
  177.         MOVE.L  pubs,A0
  178.         LEA     pubArrays.aINTOUT+2(A0),A0
  179.         MOVE.L  (A0)+,(A3)+
  180.         MOVE.L  (A7)+,A1
  181.         MOVE.W  (A0)+,D0
  182.         MOVE.B  D0,(A1)         ; SET belegt nur ein Byte
  183.         MOVE.L  (A7)+,A1
  184.         MOVE.W  (A0)+,D0
  185.         MOVE.B  D0,(A1)         ; SET belegt nur ein Byte
  186.     END;
  187.   END mouseEvent;
  188.  
  189. PROCEDURE MouseEvent (    moveDirec: RectEnterMode;
  190.                           frame    : Rectangle;
  191.                       VAR buttons  : MButtonSet;
  192.                       VAR keyState : SpecialKeySet;
  193.                       VAR loc      : Point);
  194.  
  195.   VAR   locResult: Point;
  196.                      
  197.   (*$L+*)
  198.   BEGIN
  199.     ASSEMBLER
  200. again
  201.         MOVEQ   #3,D0
  202.         LEA     moveDirec(A6),A0
  203. loop    MOVE.L  (A0)+,(A3)+
  204.         DBF     D0,loop
  205.         MOVE.W  (A0),(A3)+
  206.         JSR     mouseEvent
  207.         MOVE.L  -(A3),locResult(A6)
  208.         
  209.         TST.W   firstRectPlug
  210.         BEQ     cont
  211.         MOVE.L  locResult(A6),(A3)+
  212.         MOVE.L  buttons(A6),A0
  213.         MOVE.B  (A0),(A3)+
  214.         ADDQ.L  #1, A3
  215.         MOVE.L  keyState(A6),A0
  216.         MOVE.B  (A0),(A3)+
  217.         ADDQ.L  #1, A3
  218.         MOVE.L  firstRectPlug,A0
  219.         JSR     (A0)
  220.         TST.W   -(A3)
  221.         BEQ     again
  222. cont
  223.         TST.W   secondRectPlug
  224.         BEQ     cont2
  225.         MOVE.L  locResult(A6),(A3)+
  226.         MOVE.L  buttons(A6),A0
  227.         MOVE.B  (A0),(A3)+
  228.         ADDQ.L  #1, A3
  229.         MOVE.L  keyState(A6),A0
  230.         MOVE.B  (A0),(A3)+
  231.         ADDQ.L  #1, A3
  232.         MOVE.L  secondRectPlug,A0
  233.         JSR     (A0)
  234.         TST.W   -(A3)
  235.         BEQ     again
  236. cont2
  237.  
  238.         MOVE.L  loc(A6),A0
  239.         MOVE.L  locResult(A6),(A0)      ;  loc:=locResult
  240.     END;
  241.   END MouseEvent;
  242.   (*$L=*)
  243.  
  244. PROCEDURE TimerEvent (time: LONGCARD);
  245.  
  246.   BEGIN
  247.     ASSEMBLER
  248. again
  249.         MOVE.L  A3,A1
  250.         MOVE.L  pubs,A0
  251.         MOVE.L  -(A1),D0
  252.         SWAP    D0
  253.         MOVE.L  D0,pubArrays.aINTIN(A0)
  254.         MOVE.W  #EVNT_TIMER,(A3)+
  255.         JSR     aes_if
  256.         
  257.         TST.W   timerPlugActive
  258.         BEQ     cont
  259.         MOVE.L  timerPlug,A0
  260.         JSR     (A0)
  261.         TST.W   -(A3)
  262.         BEQ     again
  263. cont
  264.         SUBQ.L  #4,A3
  265.     END;
  266.   END TimerEvent;
  267.  
  268. PROCEDURE MessageEvent (VAR msg: MessageBuffer);
  269.  
  270.   BEGIN
  271.     ASSEMBLER
  272. again
  273.         MOVE.L  A3,A1
  274.         MOVE.L  pubs,A0
  275.         MOVE.L  -(A1),pubArrays.ADDRIN(A0)
  276.         MOVE.W  #EVNT_MESAG,(A3)+
  277.         JSR     aes_if
  278.         
  279.         TST.W   messagePlugActive
  280.         BEQ     cont
  281.         MOVE.L  A3,A1
  282.         MOVE.L  -(A1),A0
  283.         MOVEQ   #3,D0
  284. loop
  285.         MOVE.L  (A0)+,(A3)+
  286.         DBF     D0,loop
  287.         MOVE.L  messagePlug,A0
  288.         JSR     (A0)
  289.         TST.W   -(A3)
  290.         BEQ     again
  291. cont
  292.         SUBQ.L  #4,A3
  293.     END;
  294.   END MessageEvent;
  295.  
  296. PROCEDURE multiEvent (    events       : EventSet;
  297.                           noClicks     : CARDINAL;
  298.                           butMask,
  299.                           butState     : MButtonSet;
  300.                           moveDirec1   : RectEnterMode; rect1Size: Rectangle;
  301.                           moveDirec2   : RectEnterMode; rect2Size: Rectangle;
  302.                       VAR msg          : MessageBuffer;
  303.                           time         : LONGCARD;
  304.                       VAR mouseLoc     : Point;
  305.                       VAR buttons      : MButtonSet;
  306.                       VAR keyState     : SpecialKeySet;
  307.                       VAR key          : GemChar;
  308.                       VAR doneClicks   : CARDINAL): EventSet;
  309.   BEGIN
  310.     ASSEMBLER
  311.         MOVEQ   #4,D0
  312. loop1
  313.         MOVE.L  -(A3),-(A7)     ; 5 VAR-Parameter addr on the stack
  314.         DBF     D0,loop1
  315.         MOVE.L  pubs,A0
  316.         LEA     pubArrays.aINTIN+32(A0),A1
  317.         MOVE.L  -(A3),D0
  318.         SWAP    D0
  319.         MOVE.L  D0,-(A1)        ; 'time'
  320.         MOVE.L  -(A3),pubArrays.ADDRIN(A0)     ; VAR address from 'msg'
  321.         MOVEQ   #4,D0
  322. loop2
  323.         MOVE.L  -(A3),-(A1)     ; 5x2 words data from parm.stack -> aINTIN
  324.         DBF     D0,loop2
  325.         MOVEQ   #0, D0
  326.         SUBQ.L  #1, A3
  327.         MOVE.B  -(A3), D0
  328.         MOVE.W  D0, -(A1)       ; 'butState' -> aINTIN
  329.         SUBQ.L  #1, A3
  330.         MOVE.B  -(A3), D0
  331.         MOVE.W  D0, -(A1)       ; 'butMask' -> aINTIN
  332.         MOVE.W  -(A3), -(A1)    ; 'noClicks' -> aINTIN
  333.         MOVEQ   #0, D0
  334.         SUBQ.L  #1, A3
  335.         MOVE.B  -(A3), D0
  336.         MOVE.W  D0, -(A1)       ; 'events' -> aINTIN
  337.         MOVE.W  #EVNT_MULTI,(A3)+
  338.         JSR     aes_if
  339.         
  340.         MOVE.L  pubs,A0
  341.         LEA     pubArrays.aINTOUT(A0),A0
  342.         MOVE.W  (A0)+,D0
  343.         MOVE.B  D0,(A3)+
  344.         ADDQ.L  #1, A3
  345.         MOVE.L  (A7)+,A1
  346.         MOVE.L  (A0)+,(A1)      ; 'mouseLoc.x/.y'
  347.         MOVE.L  (A7)+,A1        ; 'buttons'
  348.         MOVE.W  (A0)+,D0
  349.         MOVE.B  D0,(A1)         ; SET belegt nur 1 Byte
  350.         MOVE.L  (A7)+,A1        ; 'keyState'
  351.         MOVE.W  (A0)+,D0
  352.         MOVE.B  D0,(A1)         ; SET belegt nur 1 Byte
  353.         MOVE.L  (A7)+,A1        ; 'key'
  354.         MOVE.W  (A0)+,(A1)
  355.         MOVE.L  (A7)+,A1        ; 'doneClicks'
  356.         MOVE.W  (A0)+,(A1)
  357.     END;
  358.   END multiEvent;
  359.                      
  360. PROCEDURE MultiEvent (    events       : EventSet;
  361.                           noClicks     : CARDINAL;
  362.                           butMask,
  363.                           butState     : MButtonSet;
  364.                           moveDirec1   : RectEnterMode; rect1Size: Rectangle;
  365.                           moveDirec2   : RectEnterMode; rect2Size: Rectangle;
  366.                       VAR msg          : MessageBuffer;
  367.                           time         : LONGCARD;
  368.                       VAR mouseLoc     : Point;
  369.                       VAR buttons      : MButtonSet;
  370.                       VAR keyState     : SpecialKeySet;
  371.                       VAR key          : GemChar;
  372.                       VAR doneClicks   : CARDINAL;
  373.                       VAR occuredEvents: EventSet);
  374.                      
  375.   VAR   eventResult: EventSet;
  376.                      
  377.   (*$L+*)
  378.   BEGIN
  379.     ASSEMBLER
  380. again
  381.         LEA     events(A6),A0
  382.         MOVEQ   #13,D0
  383. loop
  384.         MOVE.L  (A0)+,(A3)+
  385.         DBF     D0,loop
  386.         JSR     multiEvent
  387.         SUBQ.L  #1, A3
  388.         MOVE.B  -(A3),eventResult(A6)
  389.         
  390.         TST.W   keyboardPlugActive      ; watch-dog plug
  391.         BEQ     noKeyPlug
  392.         BTST    #keyboard,eventResult(A6)
  393.         BEQ     noKeyPlug
  394.         MOVE.L  key(A6),(A3)+
  395.         MOVE.L  keyState(A6),(A3)+
  396.         MOVE.L  keyboardPlug,A0
  397.         JSR     (A0)
  398.         TST.W   -(A3)
  399.         BNE     noKeyPlug
  400.         BCLR    #keyboard,eventResult(A6)
  401. noKeyPlug
  402.  
  403.         TST.W   buttonPlugActive        ; watch-dog plug
  404.         BEQ     noButPlug
  405.         BTST    #mouseButton,eventResult(A6)
  406.         BEQ     noButPlug
  407.         MOVE.L  doneClicks(A6),A0
  408.         MOVE.W  (A0),(A3)+
  409.         MOVE.L  mouseLoc(A6),A0
  410.         MOVE.L  (A0),(A3)+
  411.         MOVE.L  buttons(A6),A0
  412.         MOVE.B  (A0),(A3)+
  413.         ADDQ.L  #1, A3
  414.         MOVE.L  keyState(A6),A0
  415.         MOVE.B  (A0),(A3)+
  416.         ADDQ.L  #1, A3
  417.         MOVE.L  buttonPlug,A0
  418.         JSR     (A0)
  419.         TST.W   -(A3)
  420.         BNE     noButPlug
  421.         BCLR    #mouseButton,eventResult(A6)
  422. noButPlug
  423.  
  424.         TST.W   firstRectPlugActive
  425.         BEQ     noFirstPlug
  426.         BTST    #firstRect,eventResult(A6)
  427.         BEQ     noFirstPlug
  428.         MOVE.L  mouseLoc(A6),A0
  429.         MOVE.L  (A0),(A3)+
  430.         MOVE.L  buttons(A6),A0
  431.         MOVE.B  (A0),(A3)+
  432.         ADDQ.L  #1, A3
  433.         MOVE.L  keyState(A6),A0
  434.         MOVE.B  (A0),(A3)+
  435.         ADDQ.L  #1, A3
  436.         MOVE.L  firstRectPlug,A0
  437.         JSR     (A0)
  438.         TST.W   -(A3)
  439.         BNE     noFirstPlug
  440.         BCLR    #firstRect,eventResult(A6)
  441. noFirstPlug
  442.  
  443.         TST.W   secondRectPlugActive
  444.         BEQ     noSecondPlug
  445.         BTST    #secondRect,eventResult(A6)
  446.         BEQ     noSecondPlug
  447.         MOVE.L  mouseLoc(A6),A0
  448.         MOVE.L  (A0),(A3)+
  449.         MOVE.L  buttons(A6),A0
  450.         MOVE.B  (A0),(A3)+
  451.         ADDQ.L  #1, A3
  452.         MOVE.L  keyState(A6),A0
  453.         MOVE.B  (A0),(A3)+
  454.         ADDQ.L  #1, A3
  455.         MOVE.L  secondRectPlug,A0
  456.         JSR     (A0)
  457.         TST.W   -(A3)
  458.         BNE     noSecondPlug
  459.         BCLR    #secondRect,eventResult(A6)
  460. noSecondPlug
  461.  
  462.         TST.W   timerPlugActive
  463.         BEQ     noTimerPlug
  464.         BTST    #timer,eventResult(A6)
  465.         BEQ     noTimerPlug
  466.         MOVE.L  timerPlug,A0
  467.         JSR     (A0)
  468.         TST.W   -(A3)
  469.         BNE     noTimerPlug
  470.         BCLR    #timer,eventResult(A6)
  471. noTimerPlug
  472.  
  473.         TST.W   messagePlugActive
  474.         BEQ     noMsgPlug
  475.         BTST    #message,eventResult(A6)
  476.         BEQ     noMsgPlug
  477.         MOVE.L  msg(A6),A0
  478.         MOVEQ   #3,D0
  479. msgLoop
  480.         MOVE.L  (A0)+,(A3)+
  481.         DBF     D0,msgLoop
  482.         MOVE.L  messagePlug,A0
  483.         JSR     (A0)
  484.         TST.W   -(A3)
  485.         BNE     noMsgPlug
  486.         BCLR    #message,eventResult(A6)
  487. noMsgPlug
  488.  
  489.         MOVE.L  occuredEvents(A6),A0
  490.         MOVE.B  eventResult(A6),(A0)
  491.     END;
  492.   END MultiEvent;
  493.   (*$L=*)
  494.                      
  495. PROCEDURE SetDClickSpeed (speed: CARDINAL);
  496.  
  497.   BEGIN
  498.     ASSEMBLER
  499.         MOVE.L      pubs,A0
  500.         MOVE.W      -(A3),pubArrays.aINTIN(A0)
  501.         MOVE.W      #1,pubArrays.aINTIN+2(A0)       ; setzen
  502.         MOVE.W      #EVNT_DCLICK,(A3)+
  503.         JSR         aes_if
  504.     END;
  505.   END SetDClickSpeed;
  506.  
  507. PROCEDURE DClickSpeed (): CARDINAL;
  508.  
  509.   BEGIN
  510.     ASSEMBLER
  511.         MOVE.L      pubs,A0
  512.         CLR.W       pubArrays.aINTIN+2(A0)          ; lesen
  513.         MOVE.W      #EVNT_DCLICK,(A3)+
  514.         JSR         aes_if
  515.         MOVE.L      pubs,A0
  516.         MOVE.W      pubArrays.aINTOUT(A0),(A3)+
  517.     END;
  518.   END DClickSpeed;
  519.  
  520.  
  521. END AESEvents.
  522.